package br.com.websec.cnab;

import br.com.websec.util.CnabUtil;
import br.com.websec.util.FuncoesUtil;
import br.com.websec.util.UtilException;

public class Rodape extends CnabUtil {

    private String codBanco;

    private String loteServico;

    private String registroTrailer;
   
    private String conta;

    private int qtdLotes;

    private int qtdRegistros;

    private int qtdConsilacoes;

    private int seqregistro;

    public Rodape() {

            setLoteServico( "9999" );
            setRegistroTrailer( "9" );
    }

    public int getSeqregistro() {

            return seqregistro;
    }

    public void setSeqregistro( int seqregistro ) {

            this.seqregistro = seqregistro;
    }

    public String getCodBanco() {

            return codBanco;
    }

    public void setCodBanco( final String codBanco ) {

            this.codBanco = codBanco;
    }

    public String getLoteServico() {

            return loteServico;
    }

    private void setLoteServico( final String loteServico ) {

            this.loteServico = loteServico;
    }

    public int getQtdConsilacoes() {

            return qtdConsilacoes;
    }

    public void setQtdConsilacoes( final int qtdConsilacoes ) {

            this.qtdConsilacoes = qtdConsilacoes;
    }

    public int getQtdLotes() {

            return qtdLotes;
    }

    public void setQtdLotes( final int qtdLotes ) {

            this.qtdLotes = qtdLotes;
    }

    public int getQtdRegistros() {

            return qtdRegistros;
    }

    public void setQtdRegistros( final int qtdRegistros ) {

            this.qtdRegistros = qtdRegistros;
    }

    public String getRegistroTrailer() {

            return registroTrailer;
    }

    private void setRegistroTrailer( final String regTrailer ) {

            this.registroTrailer = regTrailer;
    }

   
    public String getConta() {
   
            return conta;
    }

   
    public void setConta( String codConta ) {
   
            this.conta = codConta;
    }

    public String getLine() throws UtilException {

            StringBuilder line = new StringBuilder();

            try {

	            line.append( FuncoesUtil.replicate( "9", 1 ) ); // Posição 001 a 001 - Identificação do registro
	            line.append( FuncoesUtil.replicate( " ", 393 ) ); // Posição 002 a 394 - Branco            
	            line.append( formatar( seqregistro, EnumTipo.$9, 6, 0 ) ); // Posição 395 a 400 - Nro Sequencial do ultimo registro

            } catch ( Exception e ) {
                    throw new UtilException( "CNAB registro trailer.\nErro ao escrever registro.\n" + e.getMessage() );
            }

            line.append( (char) 13 );
            line.append( (char) 10 );
            return line.toString();
    }

    
    public void parseLine( String line ) throws UtilException {

            try {

                    if ( line == null ) {
                            throw new UtilException( "Linha nula." );
                    }
                    else {

                            setCodBanco( line.substring( 0, 3 ) );
                            setLoteServico( line.substring( 3, 7 ) );
                            setRegistroTrailer( line.substring( 7, 8 ) );
                            setQtdRegistros( line.substring( 17, 23 ).trim().length() > 0 ? Integer.parseInt( line.substring( 17, 23 ).trim() ) : 0 );
                            setQtdLotes( line.substring( 23, 29 ).trim().length() > 0 ? Integer.parseInt( line.substring( 23, 29 ).trim() ) : 0 );
                            setQtdRegistros( line.substring( 29, 35 ).trim().length() > 0 ? Integer.parseInt( line.substring( 29, 35 ).trim() ) : 0 );
                    }
            } catch ( Exception e ) {
                    throw new UtilException( "CNAB registro trailer.\nErro ao ler registro.\n" + e.getMessage() );
            }
    }

	public Rodape(String codBanco, String loteServico, String registroTrailer,
			String conta, int qtdLotes, int qtdRegistros, int qtdConsilacoes,
			int seqregistro) {
		super();
		this.codBanco = codBanco;
		this.loteServico = loteServico;
		this.registroTrailer = registroTrailer;
		this.conta = conta;
		this.qtdLotes = qtdLotes;
		this.qtdRegistros = qtdRegistros;
		this.qtdConsilacoes = qtdConsilacoes;
		this.seqregistro = seqregistro;
	}
   
}
